package com.wensi.lib_voice.tts

import android.content.Context
import android.util.Log
import com.baidu.tts.client.SpeechError
import com.baidu.tts.client.SpeechSynthesizer
import com.baidu.tts.client.SpeechSynthesizerListener
import com.baidu.tts.client.TtsMode
import com.wensi.lib_voice.manager.VoiceManager


object VoiceTTS : SpeechSynthesizerListener {
    private var TAG: String? = VoiceTTS::class.java.simpleName
    // TTS对象
    private lateinit var mSpeechSynthesizer: SpeechSynthesizer
    // 回调接口对象
    private var ttsResultListener: OnTTSResultListener? = null
    // 初始化tts对象
    fun initTTS (context: Context) {
        mSpeechSynthesizer = SpeechSynthesizer.getInstance()
        mSpeechSynthesizer.setContext(context) // this 是Context的之类，如Activity

        mSpeechSynthesizer.setAppId(VoiceManager.VOICE_APP_ID/*这里只是为了让Demo运行使用的APPID,请替换成自己的id。*/);
        mSpeechSynthesizer.setApiKey(VoiceManager.VOICE_API_KEY, VoiceManager.VOICE_SECRET_KEY/*这里只是为了让Demo正常运行使用APIKey,请替换成自己的APIKey*/);

        // 设置监听
        mSpeechSynthesizer.setSpeechSynthesizerListener(this) //listener是SpeechSynthesizerListener 的实现类，需要实现您自己的业务逻辑。SDK合成后会对这个类的方法进行回调。

        // 其他参数
        // 发声人
        setPeople("0")
        // 语速
        setVoiceSpeed("5")
        // 音量
        setVoiceVolume("5")
        // 初始化
        mSpeechSynthesizer.initTts(TtsMode.ONLINE)
    }

    override fun onSynthesizeStart(p0: String?) {
        Log.i(TAG, "合成开始 ")
    }

    override fun onSynthesizeFinish(p0: String?) {
        Log.i(TAG, "合成结束 ")
    }

    override fun onSpeechProgressChanged(p0: String?, p1: Int) {
    }


    override fun onSpeechStart(p0: String?) {
        Log.i(TAG, "开始播放 ")
    }
    override fun onSpeechFinish(p0: String?) {
        Log.i(TAG, "播放结束 ")
        ttsResultListener?.ttsEnd()
    }

    override fun onSynthesizeDataArrived(p0: String?, p1: ByteArray?, p2: Int, p3: Int) {
    }

    override fun onError(text: String?, err: SpeechError?) {
        Log.i(TAG, "合成 失败 text:"+text+"  ------ err:"+err)
    }
    // 开始说话，初始化回调接口。播放结束，并且进行回调
    fun startSpeak(text: String, ttsResultListener: OnTTSResultListener?) {
        this.ttsResultListener = ttsResultListener
        mSpeechSynthesizer.speak(text)
    }
    // 暂停说话
    fun pauseSpeak() {
        mSpeechSynthesizer.pause()

    }
    // 继续说话
    fun resumeSpeak() {
        mSpeechSynthesizer.resume()

    }
    // 停止说话
    fun stopSpeak() {
        mSpeechSynthesizer.stop()

    }
    // 释放说话资源
    fun releaseSpeak() {
        mSpeechSynthesizer.release()

    }
    // 设置发音人
    fun setPeople(people: String = "0") {
        mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEAKER, people) // "5"度小娇（情感女声）
    }
    // 设置播放音量
    fun setVoiceSpeed(speed: String) {
        mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_VOLUME, speed)
    }
    // 设置播放音语速
    fun setVoiceVolume(volume: String) {
        mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEED, volume)
    }
    /** 当语音播放结束的时候，做逻辑处理 */
    interface OnTTSResultListener {
        fun ttsEnd () // 播放结束
    }
}